<?php

/**
 +----------------------------------------------+
 * PHP Version 5.2.10                           *
 +----------------------------------------------+
 * 功能说明：抽象的UBBCODE处理类，其他的XXXUBBCode
 * 类都是继承自此类。
 * 方法：
 * 1.replaceUBBCode()：将此种的UBBCODE代码进行替换
 * 生成对应的HTML代码。
 * 2.
 +----------------------------------------------+
 * Author    ：九九                             *
 * QQ        ：405494897                        *
 * Email     ：xjiujiu@foxmail.com              *
 * Copyright ：2010/7/22                        *
 +----------------------------------------------+ 
**/

abstract class UBBCode{
    protected $htmlCode;
    protected $content;
    protected $value;
    protected $regExp;
    protected $regExpSplit; 
    protected $UBBCode;
    
    /**
    * 
    * @name 初始化函数
    * 
    * @param $htmlCode：该类UBB的本来的HTML代码
    * @param $content：UBBCode之间的内容，即修饰内容
    * @param $value：保存此种UBBCODE的链接地址
    * @param $regExp：用于替换UBBCode的正则表达式
    * @param $regExpSplit：用于分解字符串的正则表达式
    * @param $UBBCode：原始的UBBCode代码用于URL的地址拆分等
    * 
    **/
    public function __construct(&$content,$value,$UBBCode,$regExp){
        $this->regExp           = "/$regExp/i";        
        $this->content          = &$content;
        $this->value            = $value;
        $this->UBBCode          = $UBBCode;     
        $this->regExpClearShit        = "/\\/m";
        //$this->regExpSplit      = "/\[[a-z]+\]|\[\/[a-z]+\]|\[[a-z]+_\d+\]/im";
        $this->regExpSplit      = "/<[\w=\" ':\/-]+>|<\/[a-z]+>|<[\w=\" '-:\/]+\/>/im";
    }
    
    /**
    * @name 销毁变量
    **/
    public function __destruct(){
        unset($this->regExp);
        unset($this->content);
        unset($this->UBBCode);
        unset($this->value);
    }
    
    /**
    * @name  替换UBBCode的方法
    * 
    * 注意：此方法中所有用到的preg_replace()函数都
    * 只能对匹配的结果进行一次匹配，不能进行多次。
    **/
    abstract public function replaceUBBCode();
    
    /**
    * @name  将数组中的字符串连成一串
    * 
    * @param $strArr：要进行连接的字符串数组
    * @param $value：$strArr中的元素
    * @param $resultStr：转接后的结果字符串
    * 
    **/
    public function ConactStr($strArr){
        if(is_array($strArr) == true){
            foreach($strArr as $value){
                $resultStr .= $value;
            }
        }
        
        return $resultStr;
    }
    
    /**
    * @name 清除转义字符。
    * 
    * @param $content:要清除的字符。
    * @param $this->regExpClearShift：匹配正则
    **/
    public function pregClearShit($content){
        return preg_replace($this->regExpClearShift,'',$content);
    }
    
    /**
    * @name 分隔UBBCode字符串
    * 
    * @param $content：待分隔的UBBCODE代码字符串
    * @param $this->regExpSplit：用于进行分隔的正则表达式。
    * 
    **/
    public function pregSplit($content){       
        return preg_split($this->regExpSplit,$content);
    }
    
    /**
    * @name  取得当前待处理的$content的结果
    * 
    * @param $this->content：当前处理中的UBBCODE字符串。
    **/
    public function getResulthtmlCode(){
        return $this->content;
    }        
}

?>